package web

import (
	"github.com/gookit/validate"
	"ksd-social-api/commons/base/controller"
	loginc "ksd-social-api/modules/login/model/context"
	lservice "ksd-social-api/modules/login/service"
	"ksd-social-api/modules/user/model"
	"ksd-social-api/modules/user/model/context"
	service "ksd-social-api/modules/user/service"
)

type AdminUserController struct {
	controller.BaseController
}

var adminUserService = service.AdminUserService{}
var loginService = lservice.LoginService{}

/*
*
查询信息
*/
func (web *AdminUserController) FindUsers() {
	// 1: 定义一个接受分页信息的上下文
	userSearchContext := context.UserSearchContext{}
	// 2: 开始绑定参数
	web.BindJSON(&userSearchContext)
	userSearchContext.SystemId = web.GetSystemId()
	web.Ok(adminUserService.FindUserListAndPage(userSearchContext))
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  根据用户id查询用户信息
 */
func (web *AdminUserController) SaveUpdateUser() {
	// 1: 定义一个接受分页信息的上下文
	user := model.User{}
	// 2: 开始绑定参数
	web.BindJSON(&user)
	user.SystemId = web.GetSystemId()
	user.SystemName = web.GetSystemName()
	// 1: 根据用户id执行查询
	updateUser := adminUserService.SaveUpdateUser(user)
	web.Ok(updateUser)
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  根据用户id查询用户信息
 */
func (web *AdminUserController) UpdatePwd() {
	// 1: 定义一个接受分页信息的上下文
	adminUserPasswordContext := context.AdminUserPasswordContext{}
	// 2: 开始绑定参数
	web.BindJSON(&adminUserPasswordContext)
	adminUserPasswordContext.SystemId = web.GetSystemId()
	adminUserPasswordContext.SystemName = web.GetSystemName()
	// 1: 根据用户id执行查询
	flag, _ := adminUserService.UpdateUserPassword(adminUserPasswordContext)
	web.Ok(flag)
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  根据用户id查询用户信息
 */
func (web *AdminUserController) UpdateTelephone() {
	// 1: 定义一个接受分页信息的上下文
	adminUserTelephoneContext := context.AdminUserTelephoneContext{}
	// 2: 开始绑定参数
	web.BindJSON(&adminUserTelephoneContext)
	adminUserTelephoneContext.SystemId = web.GetSystemId()
	adminUserTelephoneContext.SystemName = web.GetSystemName()
	// 1: 根据用户id执行查询
	// 使用新的uuid更新
	user := userService.GetUserInfoByTelephone(adminUserTelephoneContext.Telephone, adminUserTelephoneContext.SystemId)
	// 2: 获取用户唯一uuid和新密码进行加密
	if user != nil {
		web.FailCodeMsg(789, "手机已被注册")
		return
	}
	flag, _ := adminUserService.UpdateUserTelephone(adminUserTelephoneContext)
	web.Ok(flag)
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  根据用户id查询用户信息
 */
func (web *AdminUserController) GetUserById() {
	// 1: 获取小册id
	userId, _ := web.ParseParamUint64("id")
	// 1: 根据用户id执行查询
	user := adminUserService.GetUserById(userId, web.GetSystemId())
	web.Ok(user)
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  保存用户购买VIP信息
 */
func (web *AdminUserController) SaveUserBuyVip() {
	// 1: 定义一个接受分页信息的上下文
	adminUserVipContext := context.AdminUserVipContext{}
	// 2: 开始绑定参数
	web.BindJSON(&adminUserVipContext)
	adminUserVipContext.SystemId = web.GetSystemId()
	adminUserVipContext.SystemName = web.GetSystemName()
	user := adminUserService.SaveUserBuyVip(adminUserVipContext)
	web.Ok(user)
}

/*更新状态*/
func (web *AdminUserController) UpdateFieldById() {
	// 1: 定义一个接受分页信息的上下文
	noteUpdateContext := context.UserUpdateContext{}
	// 2: 开始绑定参数
	web.BindJSON(&noteUpdateContext)
	noteUpdateContext.SystemId = web.GetSystemId()
	web.Ok(adminUserService.UpdateFieldById(noteUpdateContext))
}

/*
*
修改状态
*/
func (web *AdminUserController) UpdateFieldByCodeId() {
	// 1: 定义一个接受分页信息的上下文
	userUpdateContext := context.UserUpdateContext{}
	// 2: 开始绑定参数
	web.BindJSON(&userUpdateContext)
	userUpdateContext.SystemId = web.GetSystemId()
	web.Ok(adminUserService.UpdateFieldByCodeId(userUpdateContext))
}

/**
* @author feige
* @date 2023-09-26
* @desc 登录逻辑 -- 账号和密码的方式
 */
func (web *AdminUserController) Reg() {
	// 1: 获取登录用户信息（账号、手机+密码+数字验证码）----context
	regContext := loginc.AdminRegContext{}
	// 2: 获取参数信息把参数信息绑定到结构体中
	web.BindJSON(&regContext)
	// 3: 对登录用户信息进行验证
	validation := validate.Struct(regContext)
	if !validation.Validate() {
		web.FailWithValidatorData(validation)
		return
	}
	// 注册--立即登录
	regContext.SystemId = web.GetSystemId()
	regContext.SystemName = web.GetSystemName()

	account := userService.GetUserInfoByAccount(regContext.Account, regContext.SystemId)
	if account != nil {
		web.FailCodeMsg(789, "账号已被注册")
		return
	}

	account1 := userService.GetUserInfoByTelephone(regContext.Account, regContext.SystemId)
	if account1 != nil {
		web.FailCodeMsg(789, "账号已被注册")
		return
	}

	loginVo, _ := loginService.RegAdminByAccount(&regContext)
	web.Ok(loginVo)
}

/*
*
保存兑换码
*/
func (web *AdminUserController) SaveUpdateCodes() {
	// 1: 定义一个接受分页信息的上下文
	userCodeContext := context.UserCodeContext{}
	// 2: 开始绑定参数
	web.BindJSON(&userCodeContext)
	userCodeContext.SystemId = web.GetSystemId()
	web.Ok(adminUserService.SaveUpdateCode(userCodeContext))
}

/*
*
查询栏目兑换码信息
*/
func (web *AdminUserController) FindCodes() {
	// 1: 定义一个接受分页信息的上下文
	codeSearchContext := context.CodeSearchContext{}
	// 2: 开始绑定参数
	web.BindJSON(&codeSearchContext)
	codeSearchContext.SystemId = web.GetSystemId()
	web.Ok(adminUserService.FindCodePage(codeSearchContext))
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  根据id删除
 */
func (web *AdminUserController) DelById() {
	id, _ := web.ParseParamUint64("id")
	web.Ok(adminUserService.DelById(id, web.GetSystemId()))
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  根据用户id查询用户明细
 */
func (web *AdminUserController) DelCodeById() {
	id, _ := web.ParseParamUint64("id")
	web.Ok(adminUserService.DelCodeById(id, web.GetSystemId()))
}
